/*
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; $Workfile:   LH7A400_evb.i  $
; $Revision: 1.1 $
; $Author: chenhui $
; $Date: 2005/01/20 10:22:38 $
; 
; Project:  LH7A400 Evaluation Board
; 
; Description:
;       LH7A400 EVB (Platform) definitions
;       Maps location of 16KB MMU Translation Table (TT_BASE)
;
; Predefines:
;       BOOTMODE = 1
;       Maps Asynchronous Flash to 0x0, Synchronous Flash to 0xF0000000
;       Any other value swaps mapping.
;
; $Log: LH7A400_evb.i,v $
; Revision 1.1  2005/01/20 10:22:38  chenhui
; Port sharp netloader and improve the kernel startup for sharp
;
;
;   Rev 1.16   Jun 25 2002 18:41:56   BarnettH
;Added memory-mapped bases for UART's
;
;   Rev 1.15   Jun 14 2002 13:25:06   BarnettH
;Removed PROTO_LH7A400 predefine.
;Cleaned up file banner.
;Eliminated CLKIDX values.
;
;   Rev 1.14   Jun 13 2002 14:46:40   BarnettH
;EIT Alpha1. Many changes; may not be compatible with previous usage.
;
;   Rev 1.13   Jun 06 2002 10:49:14   BarnettH
;Added LED utility codes section
;
;   Rev 1.12   Jun 05 2002 11:34:20   MaysR
;Added additional clock indexes:
;175/87/22, 184/92/23, 190/96/24.
;
;   Rev 1.11   Jun 05 2002 11:17:54   BarnettH
;Format housecleaning
;Added SDRAM_PHYS_SIZE
;Added MODE_STACK_INIT_MMU
;Added DATA_STORE_SIZE and DATA_STORE_BASE
;Made SVC_STACK_IRAM dependent on DATA_STORE_xx
;Added Dip Switch equates
;Changed SVC_STACK_INIT to SVC_STACK_SDRAM
;Added several CPLD equates, Dip Switches, 7-seg, 
;Added equates re SMC bcr2
;
;   Rev 1.10   May 21 2002 18:28:20   MaysR
;Changed Include back to LH7A400_mmu.i. (changed in error)
;
;   Rev 1.8   Apr 02 2002 11:42:30   SuryanG
;Added legal disclaimer.
;
;   Rev 1.7   Nov 19 2001 15:52:56   MaysR
;Expanded IRAMATZERO ifdef, corrected logic error.
;
;   Rev 1.6   Nov 16 2001 16:48:00   MaysR
;Added predefine for IRAM mapped to zero.
;
;   Rev 1.5   Nov 14 2001 16:21:42   MaysR
;Added clock speed settings up to 200-100-50
;
;   Rev 1.4   Oct 09 2001 18:49:02   BarnettH
;Added comment on MMU_NO_CACHE
;
;   Rev 1.3   Oct 04 2001 18:02:40   BarnettH
;Added Clock Index equate to PROTO_LH7A400 conditional
;
;   Rev 1.2   Oct 04 2001 17:52:20   BarnettH
;Added PROTO_LH7A400 pre-define and associated #define's
;
;   Rev 1.1   Sep 28 2001 15:12:52   BarnettH
;Added MODE_STACK_INIT_MMU
;Corrected SYSTEM_STACK_INIT
;Added Clock indices up to 200 MHz core
;
;   Rev 1.0   Sep 18 2001 18:04:06   BarnettH
;Initial revision.
;
; SHARP MICROELECTRONICS OF THE AMERICAS MAKES NO REPRESENTATION
; OR WARRANTIES WITH RESPECT TO THE PERFORMANCE OF THIS SOFTWARE,
; AND SPECIFICALLY DISCLAIMS ANY RESPONSIBILITY FOR ANY DAMAGES, 
; SPECIAL OR CONSEQUENTIAL, CONNECTED WITH THE USE OF THIS SOFTWARE.
;
; SHARP MICROELECTRONICS OF THE AMERICAS PROVIDES THIS SOFTWARE SOLELY 
; FOR THE PURPOSE OF SOFTWARE DEVELOPMENT INCORPORATING THE USE OF A 
; SHARP MICROCONTROLLER OR SYSTEM-ON-CHIP PRODUCT. USE OF THIS SOURCE
; FILE IMPLIES ACCEPTANCE OF THESE CONDITIONS.
;
; COPYRIGHT (C) 2001  SHARP MICROELECTRONICS OF THE AMERICAS INC.
;                        CAMAS, WA
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; SPECIALIZED INCLUDES
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;   INCLUDE LH7A400_mmu.i
*/
.include "LH7A400_mmu.i"
/*
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; LH7A400 xPSR bits
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
*/
.equ MODE_USR        ,     0x010
.equ MODE_FIQ        ,     0x011
.equ MODE_IRQ        ,     0x012
.equ MODE_SVC        ,     0x013
.equ MODE_ABORT      ,     0x017
.equ MODE_UNDEF      ,     0x01b
.equ MODE_SYSTEM     ,     0x01F
.equ I_MASK          ,     0x080
.equ F_MASK          ,     0x040
.equ T_MASK          ,     0x020

/*
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; EVB MEMORY (Physical)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; Memory Mapped Register Bases
*/
.equ AHB_REG_PHYS_BASE       , 0x80002000
.equ APB_REG_PHYS_BASE       , 0x80000000

.equ LH7A400_IRAM_PHYS_BASE  , 0xB0000000
.equ LH7A400_IRAM_PHYS_SIZE  , 0x14000  /*; 80KB*/
.equ LH7A400_IRAM_PHYS_END   , LH7A400_IRAM_PHYS_BASE + LH7A400_IRAM_PHYS_SIZE

.equ IRAM_PHYS_BASE          , LH7A400_IRAM_PHYS_BASE
.equ IRAM_PHYS_SIZE          , LH7A400_IRAM_PHYS_SIZE
.equ IRAM_PHYS_END           , LH7A400_IRAM_PHYS_END

.equ SDRAM0_PHYS_BASE        , 0xC0000000
.equ SDRAM0_PHYS_SIZE        , 0x02000000  /*; 32MB*/
.equ SDRAM0_PHYS_END         , SDRAM0_PHYS_BASE + SDRAM0_PHYS_SIZE

.equ SDRAM1_PHYS_BASE        , 0xD0000000
.equ SDRAM1_PHYS_SIZE        , 0x02000000  /*; 32MB*/
.equ SDRAM1_PHYS_END         , SDRAM1_PHYS_BASE + SDRAM1_PHYS_SIZE

.equ SDRAM_PHYS_SIZE         , (SDRAM0_PHYS_SIZE + SDRAM1_PHYS_SIZE)
.equ SDRAM_BANK_SIZE         , 0x00800000  /*; 8MB*/

.ifdef BOOTMODE
.if BOOTMODE=0x1
.equ ASYNCFLASH_PHYS_BASE    , 0x0
.equ SYNCFLASH_PHYS_BASE     , 0xF0000000
.else
.equ ASYNCFLASH_PHYS_BASE    , 0xF0000000
.equ SYNCFLASH_PHYS_BASE     , 0x0
.endif
.else
.equ ASYNCFLASH_PHYS_BASE    , 0xF0000000
.equ SYNCFLASH_PHYS_BASE     , 0x0
.endif

.equ ASYNCFLASH_PHYS_SIZE    , 0x400000 /*; 4 MB*/
.equ ASYNCFLASH_PHYS_END     , (ASYNCFLASH_PHYS_BASE+ASYNCFLASH_PHYS_SIZE)
.equ SYNCFLASH_PHYS_SIZE     , 0x800000 /*; 8 MB*/
.equ SYNCFLASH_PHYS_END      , (SYNCFLASH_PHYS_BASE+SYNCFLASH_PHYS_SIZE)

/*
; ASYNCHFLASH_MMU_BASE must be coherent with virtual memory map chosen.
; ASYNCHFLASH_MMU_BASE is 0x90000000 for tt_init_basic mapping
*/

.equ ASYNCHFLASH_MMU_BASE    , 0x90000000

.equ SRAM_PHYS_BASE          , 0x00000000
.equ SRAM_PHYS_SIZE          , 0x00200000  /*; 2 MB*/
.equ SRAM_PHYS_END           , SRAM_PHYS_BASE + SRAM_PHYS_SIZE

.equ UART1_BASE              , 0x80000600
.equ UART2_BASE              , 0x80000700
.equ UART3_BASE              , 0x80000800

/*
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; BootROM Load Addresses
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

; Translation Tables and Page Tables will be built from executable
; code at startup.

; Translation Table Base Address
*/

.ifdef IRAMATZERO
.if IRAMATZERO = 1
.equ TT_BASE_LADDR   , ((IRAM_PHYS_END - 0x4000) - TRANS_TABLE_SIZE)
.equ TT_BASE_XADDR   , ((IRAM_PHYS_END - 0x4000) - TRANS_TABLE_SIZE)
.else
.equ TT_BASE_LADDR   , (SRAM_PHYS_END - TRANS_TABLE_SIZE)
.equ TT_BASE_XADDR   , (SRAM_PHYS_END - TRANS_TABLE_SIZE)
.endif
.else
.equ TT_BASE_LADDR   , (SRAM_PHYS_END - TRANS_TABLE_SIZE)
.equ TT_BASE_XADDR   , (SRAM_PHYS_END - TRANS_TABLE_SIZE)
.endif
/*
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; Mode stack setup
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; 64 MB stack top for MMU enabled
*/
.equ MMU_MODE_STACK_BASE , SDRAM_PHYS_SIZE
/*
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; Data Store (top of IRAM)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; Leave some Data Store at top of IRAM,
; used for miscellaneous data, save status
*/
.equ DATA_STORE_SIZE         , 0    
.equ DATA_STORE_BASE         , (IRAM_PHYS_BASE + IRAM_PHYS_SIZE - DATA_STORE_SIZE)
/*
;   Miscellaneous Data
;   Boot Status Store address
*/
.equ BOOT_STATUS_STORE_ADDR  , (DATA_STORE_BASE + 0x0)
/*;   Software Reset Status Store address*/
.equ SRVAL_STATUS_STORE_ADDR , (DATA_STORE_BASE + 0x4)
/*;   CPU Board DIP Switch (S1) Status Store address*/
.equ CPU_DIPSW_STORE_ADDR    , (DATA_STORE_BASE + 0x8)
/*;   Display Board DIP Switch (S1) Status Store address*/
.equ DISP_DIPSW_STORE_ADDR   , (DATA_STORE_BASE + 0xC)

/*
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; Save Status stack in IRAM (grows down Data Store IRAM)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; Leaves four empty words at top of IRAM for contingencies.
; See comments in startup code for Save Status memory map.
*/
.equ SAVE_STATUS_STORE_ADDR  , (DATA_STORE_BASE + DATA_STORE_SIZE - 0x10)
.equ SAVE_STATUS_SIZE        , 0x80  /*; 32 words */

/*
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; Supervisor stack setup
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; Size will be as needed, calling depth is expected to be minimal
; before Primary stack setup
; Stack usage is assumed to be Full Descending
;
; IRAM stack grows down below Data Store area.
*/
.equ IRAM_SVC_STACK_BASE     , DATA_STORE_BASE
/*; SDRAM stack at top of SDRAM after MMU is enabled.*/
.equ SDRAM_SVC_STACK_BASE    , (0x0 + SDRAM_PHYS_SIZE - SDRAM_BANK_SIZE)

/*
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; Primary stack setup
; In SDRAM after MMU is enabled
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
*/
.equ SVC_STACK_SIZE      , 1024    /*; primary running stack for Supervisor*/
.equ IRQ_STACK_SIZE      , 1024    /*; primary running stack for IRQ*/
.equ UNDEF_STACK_SIZE    , 1024    /*; may be used by debugger or SWI*/
.equ FIQ_STACK_SIZE      , 256     /*; primary running stack for FIQ*/
.equ ABORT_STACK_SIZE    , 256     /*; Memory error handler stack*/
.equ USR_STACK_SIZE      , 8192    /*; not used if User Mode not entered.*/

.equ SVC_STACK_BASE      , SDRAM_SVC_STACK_BASE
.equ IRQ_STACK_BASE      , (SVC_STACK_BASE - SVC_STACK_SIZE)
.equ UNDEF_STACK_BASE    , (IRQ_STACK_BASE - IRQ_STACK_SIZE)
.equ FIQ_STACK_BASE      , (UNDEF_STACK_BASE - UNDEF_STACK_SIZE)
.equ ABORT_STACK_BASE    , (FIQ_STACK_BASE - FIQ_STACK_SIZE)
.equ USR_STACK_BASE      , (ABORT_STACK_BASE - ABORT_STACK_SIZE)
.equ USR_STACK_LIMIT     , (USR_STACK_BASE - USR_STACK_SIZE)

/*
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; LH7A400 memory mapped registers
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; Interrupt Controller
*/
.equ INTC_REG_BASE       , (APB_REG_PHYS_BASE + 0x500)
.equ INTC_INTSR_OFFSET   , 0x00
.equ INTC_INTRSR_OFFSET  , 0x04
.equ INTC_INTENS_OFFSET  , 0x08
.equ INTC_INTENC_OFFSET  , 0x0C

/* SMC*/
.equ SMC_REG_BASE        , (AHB_REG_PHYS_BASE + 0x000)
.equ SMC_BCR2_OFFSET     , 0x08        /*; CPLD*/
.equ SMC_BCR2_INIT       , 0x1000FBE0  /*; CPLD*/

/*; CLKSC*/
.equ CLKSC_REG_BASE      ,     (APB_REG_PHYS_BASE + 0x400)
.equ CLKSC_PWRSR_OFST    ,     0x00
.equ CLKSC_PWRSR         ,     0x80000400
.equ CLKSC_SCR0          ,     0x80000440      /*; scratch register 0*/
.equ CLKSC_SCR1          ,     0x80000444      /*; scratch register 1*/
/*
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
*/    